<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 买卖股票的最佳时机-冷冻期，区别：有冷静期，当天卖出后，第二天不能买入
        // 思路：分成四种状态，每个状态去推算
        /* 
            O(n)
            O(n)
        */
        var maxProfit = function(prices) {
            // 初始化
            let dp = new Array(prices.length).fill(0).map(() => new Array(4).fill(0));
            dp[0][0] = -prices[0];
            for (let i = 1; i < prices.length; i++) { // 遍历每一天的股票作为买卖时机
                // 当天持有
                dp[i][0] = Math.max(
                    dp[i - 1][0], // 前一天持有
                    dp[i - 1][3] - prices[i], // 冷冻期
                    dp[i - 1][1] - prices[i] // 状态2时买入
                )
                // 卖出多天或者冷静期后一天，可以买入
                dp[i][1] = Math.max(
                    dp[i - 1][3], // 冷冻期
                    dp[i - 1][1] // 卖出去好多天
                )
                // 当天卖出
                dp[i][2] = Math.max(
                    dp[i - 1][0] + prices[i], // 当天卖出
                )
                // 冷冻期，前一天刚好卖出
                dp[i][3] = Math.max(
                    dp[i - 1][2], // 上一天就是卖出
                )
            }
            console.log(dp, 'dp');
            // 比的是最后一天的后三个状态，卖出多天、当天卖出、冷冻期
            return Math.max(dp[prices.length - 1][1], dp[prices.length - 1][2], dp[prices.length - 1][3]); // 返回总利润
        };
        // console.log(maxProfit([1,2,3,0,2]));
        // console.log(maxProfit([1,2,3,0,4,6,10]));
        console.log(maxProfit([1, 2]));
    </script>
</body>

</html>